package com.leetBook.Krahets.linkedList;

/*
 * 《图解算法与数据结构》链表第 2 题：删除链表节点
 * 给定单向链表的头指针和一个要删除的节点的值，定义一个函数删除该节点。
 * 返回删除后的链表的头节点。
 */
public class DeleteNode {

    public ListNode deleteNode(ListNode head, int val) {
        ListNode returnValue = head;

        // 头结点处理
        if (head == null) {
            return returnValue;
        }

        if (head.val == val) {
            returnValue = head.next;
            head = null;
            return returnValue;
        }

        // 循环删除值相同的子节点，第一次删除后退出
        ListNode last = head;
        ListNode next = last.next;
        while (next != null) {
            if (next.val == val) {
                last.next = next.next;
                next = null;
            } else {
                last = next;
                next = next.next;
            }
        }

        return returnValue;
    }

}



